﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FrbaCommerce.AccessData
{
    class adCliente
    {

        //OBTENGO LOS TELEFONOS
        public static List<Gets_and_Sets.Telefono_getset> buscarTelefonosDeClientes()
        {
            List<Gets_and_Sets.Telefono_getset> listaDeTelefonos = new List<Gets_and_Sets.Telefono_getset>();

            SqlConnection conexion = Program.obtenerConexion();
            SqlCommand Comando = new SqlCommand("Select cli_telefono from GD1C2014.Monkey_Coders.Clientes", conexion);
            SqlDataReader lectura = Comando.ExecuteReader();


            while (lectura.Read())
            {
                Gets_and_Sets.Telefono_getset Tel = new Gets_and_Sets.Telefono_getset();

                if (lectura.IsDBNull(0))
                {
                    Tel.Telefono = "";
                }
                else
                {
                    Tel.Telefono = Convert.ToString(lectura.GetValue(0));
                }
                
                listaDeTelefonos.Add(Tel);
            }
            return listaDeTelefonos;

        }




        public static List<Gets_and_Sets.NroDni_getset> buscarDNIdeClientes()
        {

            List<Gets_and_Sets.NroDni_getset> listaDeDni = new List<Gets_and_Sets.NroDni_getset>();

            SqlConnection conexion = Program.obtenerConexion();
            SqlCommand Comando = new SqlCommand("Select cli_dni from GD1C2014.Monkey_Coders.Clientes", conexion);
            SqlDataReader lectura = Comando.ExecuteReader();

            while (lectura.Read())
            {
                Gets_and_Sets.NroDni_getset pDni = new Gets_and_Sets.NroDni_getset();

                pDni.Dni = lectura.GetDecimal(0);


                listaDeDni.Add(pDni);
            }


            return listaDeDni;
        }


        public static void buscarListaClientes(Gets_and_Sets.LCliente_getset List, DataGridView dgv1)
        {
            SqlConnection conn = Program.obtenerConexion();
            SqlCommand cmd = Codigo_reutilizable.FuncionesBaseDatos.crearProcedure("GD1C2014.dbo.listaDeClientes", conn,
            new SqlParameter("@Tipo_doc", List.Tipo_doc),
            new SqlParameter("@Dni", List.Nro_doc),
            new SqlParameter("@Nombre", List.Nombre),
            new SqlParameter("@Apellido", List.Apellido),
            new SqlParameter("@Mail", List.Mail));

            Codigo_reutilizable.FuncionesBaseDatos.CompletarDataGrid(dgv1, conn, cmd);
            dgv1.Columns["cli_usuario_id"].Visible = false;

           
        }


        public static Gets_and_Sets.Cliente_getset buscarCliente(Int32 id)
        {

            Gets_and_Sets.Cliente_getset cli = new Gets_and_Sets.Cliente_getset();

            SqlConnection conn = Program.obtenerConexion();
            SqlCommand cmd = Codigo_reutilizable.FuncionesBaseDatos.crearProcedure("GD1C2014.dbo.buscarUnSoloCliente", conn,
            new SqlParameter("@Id", id));

            SqlDataReader lectura = cmd.ExecuteReader();
            while (lectura.Read())
            {
                cli.Dni = Convert.ToDecimal(lectura.GetValue(1));
                cli.Tipo_doc = Convert.ToString(lectura.GetValue(2));
                cli.Apellido = Convert.ToString(lectura.GetValue(3)); 
                cli.Nombre = Convert.ToString(lectura.GetValue(4));
                cli.Telefono = Convert.ToString(lectura.GetValue(5));
                
                if (lectura.IsDBNull(6)) 
                {
                    cli.Mail = "";
                }
                else 
                {
                    cli.Mail = Convert.ToString(lectura.GetValue(6));
                }

                cli.Cod_Postal = Convert.ToString(lectura.GetValue(7));
                cli.Localidad = Convert.ToString(lectura.GetValue(8));
                cli.Dom_Calle = Convert.ToString(lectura.GetValue(9));
                cli.Nro_Calle = Convert.ToDecimal(lectura.GetValue(10));
                
                if (lectura.IsDBNull(11))
                {
                    cli.Piso = 0;
                }
                else
                {
                    cli.Piso = Convert.ToDecimal(lectura.GetValue(11));
                }

                cli.Dpto = Convert.ToString(lectura.GetValue(12));
                
                cli.Fecha_Nac = Convert.ToString(lectura.GetValue(13));
                
            }
            conn.Close();
            return cli;
        }

        public static Decimal idCliente_conDni(string dni)
        {
            Decimal idObtenido = 0;

            SqlConnection conn = Program.obtenerConexion();

            SqlCommand cmd = Codigo_reutilizable.FuncionesBaseDatos.crearProcedure("GD1C2014.dbo.idCliente_conDni", conn,
            new SqlParameter("@Dni", dni));
            SqlDataReader lectura = cmd.ExecuteReader();
            while (lectura.Read())
            {
                idObtenido = lectura.GetDecimal(0);
            }
            conn.Close();


            if (idObtenido != 0)
            {
                return (idObtenido);
            }
            else
            {
                throw new Excepciones.Excepcion("Error en Query:  << idCliente_conDni >> para obtener Id del Cliente");
            }


        }

        public static void ActualizarCliente(Gets_and_Sets.Cliente_getset Cli, int clienteAModificar)
        {
            int retorno;
            using (SqlConnection conn = Program.obtenerConexion())
            {
                SqlCommand cmd = Codigo_reutilizable.FuncionesBaseDatos.crearProcedure("GD1C2014.dbo.actualizarCliente", conn,
                new SqlParameter("@Id", clienteAModificar),
                new SqlParameter("@Dni", Cli.Dni),
                new SqlParameter("@Tipo_doc", Cli.Tipo_doc),
                new SqlParameter("@Apellido", Cli.Apellido), 
                new SqlParameter("@Nombre", Cli.Nombre),
                new SqlParameter("@Telefono", Cli.Telefono),
                new SqlParameter("@Mail", Cli.Mail),
                new SqlParameter("@Cod_Postal", Cli.Cod_Postal),
                new SqlParameter("@Localidad", Cli.Localidad),
                new SqlParameter("@Dom_Calle", Cli.Dom_Calle),
                new SqlParameter("@Nro_Calle", Cli.Nro_Calle),
                new SqlParameter("@Piso", Cli.Piso),
                new SqlParameter("@Depto", Cli.Dpto),
                new SqlParameter("@Fecha_Nac", Cli.Fecha_Nac));
                


                retorno = cmd.ExecuteNonQuery();
                conn.Close();
            }

            Codigo_reutilizable.Resultado.validar(retorno, "Cliente actualizado");

        }
    }
}



